
angular.module('smartOlwApp').controller('personaCtrl', function($scope,smartOlwServices){
	
	var divMessages  			 = document.querySelector('#messageBox');
    	divMessages.className 	 = "alert alert-info alert-dismissable";

    $scope.titulo_mensajes 		 = "Información!";
	$scope.descripcion_mensajes  = "En esta vista puede administrar el maestro de personas";
	$scope.personas 			 = [];
	$scope.tipo_documentos		 = [];
	$scope.sexos				 = [];
	
	$scope.paises				 = [];
	$scope.departamentos		 = [];
	$scope.ciudades				 = [];
	
	$scope.cargarListaMaestros	 = function() {
		var argumentos 			 = arguments;
		var metodo				 = argumentos[1];
		try{
			var exito = function(respuesta) {
				try{
					var mensaje				= (argumentos.length > 3)?argumentos[2]:"Se realizó la consulta con exito";
					var objeto				= respuesta.data;
					var lista				= angular.fromJson(objeto);
					var tipo				= (lista.length > 0)?"success":"success";
					metodo(lista);
				}catch(e){
					alert(e.message);
				}
			};

			var error = function(respuesta){
				$scope.titulo_mensajes 		= "Error!";
				$scope.descripcion_mensajes = "Se produjo un error al momento de consultar la información";
				divMessages.className 		= "alert alert-danger alert-dismissable";
				console.log(angular.toJson(respuesta));
			};
		    
			var tipo						= argumentos[0];
			var maestro						= {
				maestrodto  : { scmaestro : tipo }
			};
			smartOlwServices.sendPost(
				angular.toJson(maestro),
				hostSmart+context+endPointMaestro+methodFiltrardatosmaestroxmaestro,exito,error
			);
		}catch(e){
			$scope.titulo_mensajes 			= "Error!";
			$scope.descripcion_mensajes  	= "Se produjo un error al momento de consultar la información";
			divMessages.className 			= "alert alert-danger alert-dismissable";
		}
	};
	
	$scope.grabar							= function(persona) {
		try {
			var exito = function(respuesta) {
				$scope.descripcion_mensajes = "Persona almacenada con éxito";
				divMessages.className 		= "alert alert-success alert-dismissable";
			};
			
			var error = function(respuesta) {
				$scope.titulo_mensajes 		= "Error!";
				$scope.descripcion_mensajes = "Se produjo un error al momento de grabar la persona";
				divMessages.className 		= "alert alert-danger alert-dismissable";
				console.log(angular.toJson(respuesta));
			};
			
			var tipoIdentificacion			= persona.tipoIdentificacion;
			var sexo						= persona.sexo;
			var scciudadnacimiento			= persona.scciudadnacimiento;
			var inscciudadnacimiento		= $scope.buscarCiudad(scciudadnacimiento);
			
			persona.tipoIdentificacion 		= $scope.buscarElemento(tipoIdentificacion, $scope.tipo_documentos);
			persona.sexo					= $scope.buscarElemento(sexo, $scope.sexos);
			persona.scciudadnacimiento		= $scope.ciudades[inscciudadnacimiento];
			persona.fhmodificacion 			= "2016-04-23";
			persona.cousuario 				= 1;
			persona.fhingreso 				= "2016-04-23";
			
			if(persona["sfhnacimiento"] !== undefined) {
			   delete persona["sfhnacimiento"];
			}
			
			if(persona.scpersona === undefined || persona.scpersona === null) {
				smartOlwServices.sendPut(
					angular.toJson(persona),
					hostSmart+context+endPointPersona+methodSetPersona,exito,error
				);
			}
			else {
				smartOlwServices.sendPut(
					angular.toJson(persona),
					hostSmart+context+endPointPersona+methodEditPersona,exito,error
				);
			}
			
			persona.tipoIdentificacion 		= tipoIdentificacion;
			persona.sexo					= sexo;
			persona.scciudadnacimiento		= scciudadnacimiento;
		}
		catch(e){
			$scope.titulo_mensajes 			= "Error!";
			$scope.descripcion_mensajes  	= "Se produjo un error al momento de guardar la persona";
			divMessages.className 			= "alert alert-danger alert-dismissable";
		}
	};
	
	$scope.seleccionar						= function(persona) {
		var objeto				  	 		= angular.copy(persona);
		   $scope.scpais			 		= objeto.scciudadnacimiento.departamentodto.scpais.scpais;
		if($scope.buscarDepartamento(objeto.scciudadnacimiento.departamentodto.scdepartamento) == -1) {
		   $scope.cargarDepartamentos();
		}
		   $scope.dsdepartamento	 		= objeto.scciudadnacimiento.departamentodto.scdepartamento;
		if($scope.buscarCiudad(objeto.scciudadnacimiento.scciudad) == -1) {
		   $scope.cargarCiudades();
		}
		   objeto.scciudadnacimiento 		= objeto.scciudadnacimiento.scciudad;
		   objeto.tipoIdentificacion 		= objeto.tipoIdentificacion.scdatmestro;
		   objeto.sexo						= objeto.sexo.scdatmestro;
		   $scope.persona					= objeto;
	};
	
	$scope.eliminar							= function(persona) {
		try {
			var exito 						= function(respuesta) {
				$scope.descripcion_mensajes = "Persona eliminada con éxito";
				divMessages.className 		= "alert alert-success alert-dismissable";
			};
			
			var error 						= function(respuesta) {
				$scope.titulo_mensajes 		= "Error!";
				$scope.descripcion_mensajes = "Se produjo un error al momento de eliminar la persona";
				divMessages.className 		= "alert alert-danger alert-dismissable";
				console.log(angular.toJson(respuesta));
			};
			
			var tipoIdentificacion			= persona.tipoIdentificacion;
			var sexo						= persona.sexo;
			
			persona.tipoIdentificacion 		= $scope.buscarElemento(tipoIdentificacion, $scope.tipo_documentos);
			persona.sexo					= $scope.buscarElemento(sexo, $scope.sexos);
			persona.fhmodificacion 			= "2016-04-23";
			persona.cousuario 				= 1;
			persona.fhingreso 				= "2016-04-23";
			
			if(persona["sfhnacimiento"] !== undefined) {
			   delete persona["sfhnacimiento"];
			}
			
			if(persona.scpersona !== undefined && persona.scpersona !== null) {
				smartOlwServices.sendPut(
					angular.toJson(persona),
					hostSmart+context+endPointPersona+methodRemovePersona,exito,error
				);
			}
			
			persona.tipoIdentificacion 		= tipoIdentificacion;
			persona.sexo					= sexo;
		}
		catch(e){
			$scope.titulo_mensajes 			= "Error!";
			$scope.descripcion_mensajes  	= "Se produjo un error al momento de guardar la persona";
			divMessages.className 			= "alert alert-danger alert-dismissable";
		}
	};
	
	$scope.limpiar							= function(persona) {
		if(persona != null) {
		   persona.tipoIdentificacion 		= null;
		   persona.sexo						= null;
		   persona.dsidentificacion			= null;
		   persona.dspnombre				= null;
		   persona.dspapellido				= null;
		   persona.dsdireccion				= null;
		   persona.dstelefono				= null;
		   persona.dscelular				= null;
		   persona.dsemail					= null;
		   persona.dsprofesion				= null;
		   persona.dsempresatrabaja			= null;
		   persona.dssnombre				= null;
		   persona.dssapellido				= null;
		   persona.fhnacimiento				= null;
		   persona.dsrh						= null;
		   persona.dseps					= null;
		   persona.dsbarrio					= null;
		   persona.scciudadnacimiento		= null;
		}
		   $scope.titulo_mensajes 			= "Información!";
		   $scope.descripcion_mensajes  	= "En esta vista puede administrar el maestro de personas";
		   $scope.dsdepartamento			= null;
		   $scope.scpais					= null;
		   $scope.personas 			 		= [];
		   $scope.departamentos				= [];
		   $scope.ciudades					= [];
		   divMessages.className 	 		= "alert alert-info alert-dismissable";
	};
	
	$scope.consultar						= function(persona) {
		try {
			var exito = function(respuesta) {
			   var personas					= angular.fromJson(respuesta.data);
			    $.each( personas, function( index, persona ) {
			    	persona.fhnacimiento	= new Date(persona.fhnacimiento);
			    	persona.sfhnacimiento	= ConvertDateToString(persona.fhnacimiento);
				    personas[index] 		= persona;
				});
			   	   $scope.personas 			= personas;
				if($scope.personas != null && $scope.personas.length > 0) {
				   $scope.descripcion_mensajes  = "Tenemos " + $scope.personas.length + " personas";
				}
				else {
				   $scope.titulo_mensajes 		= "Información!";
				   $scope.descripcion_mensajes 	= "No hay personas registradas";	
				}
				divMessages.className 			= "alert alert-success alert-dismissable";
			};
			
			var error = function(respuesta) {
				$scope.titulo_mensajes 		= "Error!";
				$scope.descripcion_mensajes = "Se produjo un error al momento de consultar personas";
				divMessages.className 		= "alert alert-danger alert-dismissable";
				console.log(angular.toJson(respuesta));
			};
			
			persona							= (persona == null)?{}:persona;
			var tipoIdentificacion			= (persona != null)?persona.tipoIdentificacion:null;
			var sexo						= (persona != null)?persona.sexo:null;
			var scciudadnacimiento			= (persona != null)?persona.scciudadnacimiento:null;
			
			if(tipoIdentificacion != null) {
			   persona.tipoIdentificacion 	= $scope.buscarElemento(tipoIdentificacion, $scope.tipo_documentos);
			}
			if(sexo != null) {
			   persona.sexo					= $scope.buscarElemento(sexo, $scope.sexos);	
			}
			if(scciudadnacimiento != null) {
			   var inscciudadnacimiento		= $scope.buscarCiudad(scciudadnacimiento);
			   persona.scciudadnacimiento	= $scope.ciudades[inscciudadnacimiento];
			} 
			
			smartOlwServices.sendPost(
				angular.toJson(persona),
				hostSmart+context+endPointPersona+methodGetPersona,exito,error
			);
			
			persona.tipoIdentificacion 		= tipoIdentificacion;
			persona.sexo					= sexo;
			persona.scciudadnacimiento		= scciudadnacimiento;
		}
		catch(e){
			$scope.titulo_mensajes 			= "Error!";
			$scope.descripcion_mensajes  	= "Se produjo un error al momento de consultar personas";
			divMessages.className 			= "alert alert-danger alert-dismissable";
			console.log(e);
		}
	};
	
	$scope.buscarPais 			= function(codigo) {
		return $scope.buscarItem(
				codigo, 
				$scope.paises,
				function(valor, item) {
					return (valor == item.scpais);
				});
	}
	
	$scope.buscarDepartamento 	= function(codigo) {
		return $scope.buscarItem(
			codigo, 
			$scope.departamentos,
			function(valor, item) {
				return (valor == item.scdepartamento);
			});
	}
	
	$scope.buscarCiudad 		= function(codigo) {
		return $scope.buscarItem(
				codigo, 
				$scope.ciudades,
				function(valor, item) {
					return (valor == item.scciudad);
				});
	}
	
	$scope.buscarElemento		= function(id,lista) {
		var posicion 			= $scope.buscarItem(id, lista,
			function(valor, item) {
				return (valor == item.scdatmestro);
			});
		return ((lista != null && lista.length > 0 && posicion != -1)?lista[posicion]:null);
	};
	
	$scope.buscarItem		  	= function() {
		var valor				= arguments[0];
		var lista				= arguments[1];
		var comparator			= arguments[2];
		var posicion			= -1;
		
		if(lista != null && lista.length > 0) {
			for(var index= 0; index < lista.length; index++) {
				if(comparator(valor, lista[index])) {
					posicion 		= index;
					break;
				}
			}
		}
		return posicion;
	};
	
	$scope.cargarPaises 			= function() {
		try{
			var exito 					= function(respuesta){
				try{
					var paises 			= angular.fromJson(respuesta.data);
					$scope.paises.push({dspais : 'Seleccionar' , copais : null});
					$.each(paises, function( index , pais ) {
						$scope.paises.push(pais);
				    });
				}catch(e){
					console.log(e.message);
				}
			}

			var error = function(respuesta){
				$scope.titulo_mensajes 		= "Error!";
				$scope.descripcion_mensajes = "Se produjo un error al momento de consultar la información de paises";
				divMessages.className 		= "alert alert-danger alert-dismissable";
				console.log(angular.toJson(respuesta));
			}
			smartOlwServices.sendGet(hostSmart+context+endPointPais+methodGetAllPais,exito,error);
		}catch(e){
			$scope.titulo_mensajes 		= "Error!";
			$scope.descripcion_mensajes = "Se produjo un error al momento de consultar la información de paises";
			divMessages.className 		= "alert alert-danger alert-dismissable";
		}
	}
	
	$scope.cargarDepartamentos 	= function() {
		var pais			= $scope.pais;
		var departamento 	= {scpais : {scpais : pais}};
		try{
			var exito 		= function(respuesta){
				try{
					$scope.departamentos 	= [];
					var departamentos 		= angular.fromJson(respuesta.data);
					$scope.departamentos.push({dsdepartamento : 'Seleccionar' , scdepartamento : null});
					$.each(departamentos, function( index , departamento ) {
						$scope.departamentos.push(departamento);
				    });
				}catch(e){
					console.log(e.message);
				}
			}

			var error = function(respuesta){
				$scope.titulo_mensajes 		= "Error!";
				$scope.descripcion_mensajes = "Se produjo un error al momento de consultar la información de departamentos";
				divMessages.className 		= "alert alert-danger alert-dismissable";
				console.log(angular.toJson(respuesta));
			}
			smartOlwServices.sendPost(
				angular.toJson(departamento),
				hostSmart+context+endPointDepartamento+methodGetDepartamento,
				exito,
				error);
		}catch(e){
			$scope.titulo_mensajes 			= "Error!";
			$scope.descripcion_mensajes  	= "Se produjo un error al momento de consultar la información de paises";
			divMessages.className 			= "alert alert-danger alert-dismissable";
		}
	}
	
	$scope.cargarCiudades = function() {
		var indepart	  = $scope.buscarDepartamento($scope.dsdepartamento);
		var cdepart		  = $scope.departamentos[indepart];
		var ciudadDTO  	  = {departamentodto : cdepart};
		try{
			var exito 	  = function(respuesta){
				try{
					$scope.ciudades 	= [];
					var ciudades 		= angular.fromJson(respuesta.data);
					$scope.ciudades.push({dsciudad : 'Seleccionar' , scciudad : null});
					$.each(ciudades, function( index , ciudad ) {
						$scope.ciudades.push(ciudad);
				    });
				}catch(e){
					console.log(e.message);
				}
			}

			var error = function(respuesta){
				$scope.titulo_mensajes 			= "Error!";
				$scope.descripcion_mensajes  	= "Se produjo un error al momento de consultar la información de ciudades";
				divMessages.className 			= "alert alert-danger alert-dismissable";
				console.log(angular.toJson(respuesta));
			}
			
			smartOlwServices.sendPost(
				angular.toJson(ciudadDTO),
				hostSmart+context+endPointCiudad+methodGetCiudad,
				exito,
				error);
		}catch(e){
			$scope.titulo_mensajes 			= "Error!";
			$scope.descripcion_mensajes  	= "Se produjo un error al momento de consultar la información de ciudades";
			divMessages.className 			= "alert alert-danger alert-dismissable";
		}
	}
	
	$scope.cargarPaises();
	
	$scope.cargarListaMaestros(4, function(lista) {
		$scope.tipo_documentos	 = lista;
	});
	
	$scope.cargarListaMaestros(3, function(lista) {
		$scope.sexos		 	= lista;
	});
	
});